'use strict';
const { formatBlog } = require('../utils/formatBlog');
const { formatUser } = require('../utils/formatUser');

module.exports = app => {
  class BlogService extends app.Service {
    async create({ content, userId, image }) {
      // 创建
      const result = await this.app.model.Blog.create({
        content,
        userId,
        image,
      });

      return result;
    }
    // 获取个人博客信息 (多条)
    // eslint-disable-next-line jsdoc/check-param-names
    /**
     *
     * @param {string} userId 用户Id
     * @param {string} pageIndex 页码
     * @param {string} pageSize 每页的条数
     */
    async getBlogList({ userName, pageIndex = 0, pageSize }) {
      const whereData = {};
      if (userName) {
        whereData.userName = userName
      }
      const result = await this.app.model.Blog.findAndCountAll({
        order: [
          ['id', 'desc'],
        ], // 通过id降序排列
        limit: pageSize, // 显示的条数
        offset: pageIndex * pageSize, // 跳过的条数
        // 多表联查
        include: {
          model: this.app.model.User, // 联查的表
          attributes: ['nickName', 'avatar', 'userName'], // 规定user表显示的字段 昵称 头像
          where: whereData,
        },
      });
      const count = result.count;
      const blogList = result.rows.map(item => {
        // 格式化博客数据
        item = formatBlog(item.dataValues);
        // 格式化用户信息
        item.user = formatUser(item.user.dataValues);
        return item;
      });
      return { blogList, count };
    }

    // 获取所有人的博客数据
    // async getSquareBlogList({ pageIndex = 0, pageSize }) {
    //   // 数据库中查询数据 findAndCountAll()=>{count:number,rows:[]}
    //   const result = await this.app.model.Blog.findAndCountAll({
    //     order: [['createdAt', 'desc']],
    //     limit: pageSize,
    //     offset: pageSize * pageIndex,
    //     include: {
    //       model: this.app.model.User,
    //       attributes: ['nickName', 'avatar', 'userName'],
    //     }
    //   });
    //   // 博客总量
    //   const count = result.count;
    //   // 博客列表
    //   const blogList = result.rows.map(item => {
    //     item = formatBlog(item.dataValues); // 格式化博客
    //     item.user = formatUser(item.user.dataValues); // 格式化用户
    //     return item;
    //   });
    //   return {
    //     blogList, // 博客列表
    //     count, // 博客总量
    //   }
    // };

    // 获取关注人的博客数据
    async getFollowerBlogList({ pageIndex = 0, pageSize = 10, userId }) {
      const result = await this.app.model.Blog.findAndCountAll({
        order: [['createdAt', 'desc']],
        limit: pageSize,
        offset: pageIndex * pageSize,
        include: [
          {
            // 博客与用户对应
            model: this.app.model.User,
            attributes: ['id', 'userName', 'nickName', 'avatar']
          },
          {
            // 博客与被关注人对应
            model: this.app.model.UserRelation,
            attributes: ['userId', 'followerId'],
            where: {
              userId
            },
          },
        ],
      });
      const count = result.count;
      // 博客列表
      let blogList = result.rows.map(row => row.dataValues);
      blogList = blogList.map(item => {
        item.user = formatUser(item.user.dataValues)
        item = formatBlog(item)
        return item
      });
      return {
        count,
        blogList
      };
    };
  };
  return BlogService;
};
